﻿using System;
using System.Collections.Generic;

using UnityEngine;

#if AL_CREATURE_SYS
namespace ALPackage
{
    /*************************
     * 保存所有用户添加物对象的信息，以及获取的名称
     * 此添加物需要进行蒙皮绑定，确保装备数据与骨骼匹配
     **/
    public class ALCreatureChildAdditionMeshObj : ALCreatureChildAdditionObj
    {
        /** 管理本对象的网格合并管理对象 */
        private ALCreatureAdditionObjMgr _m_momParentAdditionObjMgr;
        /** 存储默认对象中子对象的蒙皮对象列表 */
        protected List<SkinnedMeshRenderer> _m_lSkinnedRenderList;
        /** 蒙皮对象是否有效的管理需要使用自身的变量进行管理 */
        protected bool _m_bIsActive;

        protected internal ALCreatureChildAdditionMeshObj(ALCreatureAdditionObjMgr _parentMgr
            , _AALSOBasicAdditionMeshObjInfo _additionObjInfo, GameObject _obj)
            : base(_parentMgr, _additionObjInfo, _obj)
        {
            _m_momParentAdditionObjMgr = _parentMgr;

            //设置附加物有效性
            _m_bIsActive = _additionObjInfo.initActive;
            _m_lSkinnedRenderList = new List<SkinnedMeshRenderer>();

            _m_lSkinnedRenderList.AddRange(_obj.GetComponentsInChildren<SkinnedMeshRenderer>(true));
        }

        public List<SkinnedMeshRenderer> renderList { get { return _m_lSkinnedRenderList; } }
        public ALCreatureAdditionObjMgr parentMeshMgr { get { return _m_momParentAdditionObjMgr; } }

        /******************
         * 设置本附加物的有效性状态
         *
         **/
        public override bool active
        {
            get
            {
                if (null == go)
                    return false;

                return _m_bIsActive;
            }
            set
            {
                if (null == go)
                    return;

                //与原先结果相同，则不进行处理
                if (_m_bIsActive == value)
                    return;

                _m_bIsActive = value;
                //设置对象是否有效
                go.SetActive(value);

                //调用状态改变函数
                _onActiveChg(_m_bIsActive);
            }
        }

        /*****************
         * 清除Skinned对象队列
         **/
        public void clearRenderList()
        {
            _m_lSkinnedRenderList.Clear();
        }

        /*********************
         * 当有效状态变更时触发的函数
         **/
        protected override void _onActiveChg(bool _active)
        {
            //无需要合并的网格数据则不添加进合并处理对象
            if (_m_lSkinnedRenderList.Count <= 0)
                return;

            ALCreatureMeshCombineMgr.instance.addNeedCombineMgr(_m_momParentAdditionObjMgr);
        }
    }
}
#endif
